package ufc.qx.si.item1;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import ufc.qx.si.Despesa;

public class Inicio {

	private static final String ARQUIVO_CSV = "1 - DespesaCandidato.CSV";
	private static final File file =  new File("saida.xml");
	private static DocumentBuilderFactory dbf;
	private static DocumentBuilder db;
	
	public static void main(String[] args) throws FileNotFoundException, IOException {
		
		
		try {
			dbf = DocumentBuilderFactory.newInstance();
			db = dbf.newDocumentBuilder();
			DOMUtl.iniciar(db);
			lerArquivo();
			String arquivo = DOMUtl.converter();
			DOMUtl.salvarArquivo(arquivo, file);
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TransformerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
	}
	

	private static void lerArquivo(){
		try {
			
			InputStream in = new FileInputStream(ARQUIVO_CSV);
			InputStreamReader string =  new InputStreamReader(in, "UTF-8");
			BufferedReader br = new BufferedReader(string);

			while(br.ready()){
				String line = br.readLine();
				String atributos[] = line.split(";");
				for(int k=0;k<atributos.length;k++){
					atributos[k] = atributos[k].replace("\"", "");
				}
				
				Despesa despesa = toDespesa(atributos);
				DOMUtl.addDespesa(despesa);
				System.out.println(despesa);
			}
			
			br.close();
			string.close();
			in.close();
			
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
		
	
	private static Despesa toDespesa(String atributos[]){
		try{
			Despesa despesa = new Despesa();
			atributos[Indices.INDICE_COLUNA_VALOR] = atributos[Indices.INDICE_COLUNA_VALOR].replace(",", ".");
	
			despesa.setSiglaUnidadeFederativa(atributos[Indices.INDICE_COLUNA_SIGLA_UNIDADE_FEDERATIVA]);
			despesa.setSiglaPartido(atributos[Indices.INDICE_COLUNA_SIGLA_PARTIDO]);
			despesa.setDescricaoCampo(atributos[Indices.INDICE_COLUNA_DESCRICAO_CARGO]);
			despesa.setNomeCandidato(atributos[Indices.INDICE_COLUNA_NOME_CANDIDATO]);
			despesa.setNumeroCandidato(toInt(atributos[Indices.INDICE_COLUNA_NUMERO_CANDIDATO]));
			despesa.setData(atributos[Indices.INDICE_COLUNA_DATA]);
			despesa.setDocumentoFornecedor(atributos[Indices.INDICE_COLUNA_DOCUMENTO_FORNECEDOR]);
			despesa.setSiglaUnidadeFederativaFornecedor(atributos[Indices.INDICE_COLUNA_SIGLA_UNIDADE_FEDERATIVA_FORNECEDOR]);
			despesa.setNomeFornecedor(atributos[Indices.INDICE_COLUNA_NOME_FORNECEDOR]);
			despesa.setValor(toDouble(atributos[Indices.INDICE_COLUNA_VALOR]));
			despesa.setTipoDespesa(atributos[Indices.INDICE_COLUNA_TIPO_DESPESA]);
			return despesa;
		} catch(Exception e){
			return (new Despesa());
		}
	}

	
	private static int toInt(String numero){
		//TRATANDO UM POSSIVEL ERRO DE CONVERSÃO
		try{
			int res = Integer.parseInt(numero);
			return res;
		} catch (Exception e){
			return 0;
		}
	}

	
	private static double toDouble(String numero){
		//TRATANDO UM POSSIVEL ERRO DE CONVERSÃO
		try{
			double res = Double.parseDouble(numero);
			return res;
		} catch (Exception e){
			return 0;
		}
	}

}
